<?php

/**
 * ECSHOP 支付宝插件
 * ============================================================================
 * * 版权所有 2005-2012 上海商派网络科技有限公司，并保留所有权利。
 * 网站地址: http://www.ecshop.com；
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和
 * 使用；不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * $Author: douqinghua $
 * $Id: alipay.php 17217 2011-01-19 06:29:08Z douqinghua $
 */

if (!defined('IN_ECS'))
{
    die('Hacking attempt');
}

$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/alipayapp.php';

if (file_exists($payment_lang))
{
    global $_LANG;

    include_once($payment_lang);
    include_once(ROOT_PATH.'includes/alipayapp/alipay.config.php');
    include_once(ROOT_PATH.'includes/alipayapp/lib/alipay_core.function.php');
    include_once(ROOT_PATH.'includes/alipayapp/lib/alipay_rsa.function.php');
    include_once(ROOT_PATH.'includes/alipayapp/lib/alipay_notify.class.php');
}

/* 模块的基本信息 */
if (isset($set_modules) && $set_modules == TRUE)
{
    $i = isset($modules) ? count($modules) : 0;

    /* 代码 */
    $modules[$i]['code']    = basename(__FILE__, '.php');

    /* 描述对应的语言项 */
    $modules[$i]['desc']    = 'alipayapp_desc';

    /* 是否支持货到付款 */
    $modules[$i]['is_cod']  = '0';

    /* 是否支持在线支付 */
    $modules[$i]['is_online']  = '1';

    /* 作者 */
    $modules[$i]['author']  = 'ECSHOP TEAM';

    /* 网址 */
    $modules[$i]['website'] = 'http://www.alipay.com';

    /* 版本号 */
    $modules[$i]['version'] = '1.0.2';

    /* 配置信息 */
    $modules[$i]['config']  = array(
        array('name' => 'alipayapp_account',           'type' => 'text',   'value' => ''),
        array('name' => 'alipayapp_key',               'type' => 'text',   'value' => ''),
        array('name' => 'alipayapp_partner',           'type' => 'text',   'value' => ''),
        array('name' => 'alipayapp_pay_method',        'type' => 'select', 'value' => '')
    );

    return;
}

/**
 * 类
 */
class alipayapp
{

    /**
     * 构造函数
     *
     * @access  public
     * @param
     *
     * @return void
     */
    /*function alipay()
    {
    }*/

    function __construct()
    {
        //$this->alipay();
    }

    /**
     * 生成支付代码
     * @param   array   $order      订单信息
     * @param   array   $payment    支付方式信息
     */
    function get_code($order, $payment)
    {
        if (!defined('EC_CHARSET'))
        {
            $charset = 'utf-8';
        }
        else
        {
            $charset = EC_CHARSET;
        }

        $real_method = $payment['alipayapp_pay_method'];

        switch ($real_method){
            case '0':
                $service = 'trade_create_by_buyer';
                break;
            case '1':
                $service = 'create_partner_trade_by_buyer';
                break;
            case '2':
                $service = 'create_direct_pay_by_user';
                break;
			case '3':
				$service = 'mobile.securitypay.pay';
				break;
        }

        $log_id    = get_paylog_id($order['order_id'], $pay_type = PAY_ORDER);
        $extend_param = 'isv^sh22';

        $parameter = array(
			'service'           => $service,
			'partner'           => $payment['alipayapp_partner'],
			'_input_charset'    => $payment['input_charset'],
			'notify_url'        => return_urlv2('alipayapp'),
            //'extend_param'      => $extend_param,
            //'return_url'        => return_url(basename(__FILE__, '.php')),
            /* 业务参数 */
            'out_trade_no'      => $log_id,
            'subject'           => 'Chocolates',
            'payment_type'      => 1,
			'body'				=> 'Chocolates',
			'seller_id'			=> $payment['alipayapp_account'],
            'total_fee'         => $order['order_amount'],
            //'quantity'          => 1,
            /* 物流参数 */
            //'logistics_type'    => 'EXPRESS',
            //'logistics_fee'     => 0,
            //'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',
            /* 买卖双方信息 */
            //'seller_email'      => $payment['alipay_account'],
        );

        //ksort($parameter);
        //reset($parameter);
        $parameter = paraFilter($parameter);
        $parameter = argSort($parameter);
        $prestr = createLinkstring($parameter);
        /*$prestr = '';
        foreach($parameter as $k=>$v){
            $prestr .= $k.'="'.$v.'"&';
        }
        $prestr = trim($prestr, '&');*/

        $parameter['sign'] = urlencode(rsaSign($prestr, $payment['private_key_path']));
        $parameter['sign_type'] = $payment['sign_type'];

        $prestr = createLinkstring($parameter);
        /*$prestr = '';
        foreach($parameter as $k=>$v){
            $prestr .= $k.'="'.$v.'"&';
        }
        $prestr = trim($prestr, '&');*/
        $parameter['prestr'] = $prestr;

        return $parameter;
    }

    /**
     * 响应操作
     */
    function respond()
    {
        include(ROOT_PATH.'includes/alipayapp/alipay.config.php');
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();
        if(!$verify_result) {
            return false;
        }
        //$_POST = $_GET;
        $order_sn = trim($_POST['out_trade_no']);
        /* 检查支付的金额是否相符 */
        if (!check_money($order_sn, $_POST['total_fee']))
        {
            ecshop_write_log('返回金额和支付金额不等', 'paynotify');
            //return false;
            echo 'fail';exit;
        }

        if ($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS'){
            /* 改变订单状态 */
            order_paid($order_sn, 2);
            //return true;
            echo 'success';exit;
        }elseif ($_POST['trade_status'] == 'TRADE_FINISHED'){
            /* 改变订单状态 */
            order_paid($order_sn, 2);

            //return true;
            echo 'success';exit;
        }elseif ($_POST['trade_status'] == 'TRADE_SUCCESS'){
            /* 改变订单状态 */
            order_paid($order_sn, 2);

            //return true;
            echo 'success';exit;
        }else{
            ecshop_write_log('状态：'.$_POST['trade_status'], 'paynotify');
            //return false;
            echo 'fail';exit;
        }
    }
}

?>
